/**
 * @param {number[]} nums
 * @return {number[][]}
 * @description DFS
 */
var permute = function (nums) {
    let len = nums.length
    // 用来记录当前的排序内容
    let curr = []
    // 用来记录答案
    let res = []
    // 从来记录访问过的数字
    let visited = {}
    function dfs(nth) {
        if (nth === len) {
            // 不能直接推入  因为推的是引用 会一起更改值
            res.push(curr.slice())
            return
        }
        for (let i = 0; i < len; i++) {
            if (!visited[nums[i]]) {
                visited[nums[i]] = 1
                curr.push(nums[i])
                dfs(nth + 1)
                // 让出坑位
                curr.pop()
                // 恢复未访问
                visited[nums[i]] = 0
            }
        }
    }
    dfs(0)
    return res
};
